@use 'sass:math';

// 烟花动画，来源 https://codepen.io/yshlin/pen/WNMmQX

$particles: 50;
$width: 500;
$height: 500;

// Create the explosion...
$box-shadow: ();
$box-shadow2: ();
@for $i from 0 through $particles {
    $box-shadow: $box-shadow,
        math.random($width) -
            math.div($width, 2) +
            px
            math.random($height) -
            math.div($height, 1.2) +
            px
            hsl(math.random(360) 100% 50%);
    $box-shadow2: $box-shadow2, 0 0 #fff;
}
@mixin keyframes($animationName) {
    @keyframes #{$animationName} {
        @content;
    }

    @keyframes #{$animationName} {
        @content;
    }

    @keyframes #{$animationName} {
        @content;
    }

    @keyframes #{$animationName} {
        @content;
    }

    @keyframes #{$animationName} {
        @content;
    }
}

@mixin animation-delay($settings) {
    animation-delay: $settings;
}

@mixin animation-duration($settings) {
    animation-duration: $settings;
}

@mixin animation($settings) {
    animation: $settings;
}

@mixin transform($settings) {
    transform: $settings;
}

.pyro {
    position: absolute;
    left: 0;
    top: 0;
    width: 100%;
}

.pyro > .before,
.pyro > .after {
    position: absolute;
    width: 10px;
    height: 10px;
    border-radius: 50%;
    box-shadow: $box-shadow2;
    @include animation(
        (
            1s bang ease-out infinite backwards,
            1s gravity ease-in infinite backwards,
            5s position linear infinite backwards
        )
    );
}

.pyro > .after {
    @include animation-delay((1.25s, 1.25s, 1.25s));
    @include animation-duration((1.25s, 1.25s, 6.25s));
}

@include keyframes(bang) {
    to {
        box-shadow: $box-shadow;
    }
}

@include keyframes(gravity) {
    to {
        @include transform(translateY(200px));

        opacity: 0;
    }
}

@include keyframes(position) {
    0%,
    19.9% {
        margin-top: 10%;
        margin-left: 40%;
    }

    20%,
    39.9% {
        margin-top: 40%;
        margin-left: 30%;
    }

    40%,
    59.9% {
        margin-top: 20%;
        margin-left: 70%;
    }

    60%,
    79.9% {
        margin-top: 30%;
        margin-left: 20%;
    }

    80%,
    99.9% {
        margin-top: 30%;
        margin-left: 80%;
    }
}
